package com.cskaoyan.javase.oop1._8callby;

/**
 * 值传递
 * Java中的方法,究竟能改变实参什么?
 *      1.方法可以改变引用数据类型实参对象中的属性取值.称之为可以改变对象的状态
 *      2.方法不可能改变其它方法中局部变量的取值,包括:
 *          基本数据类型局部变量
 *          引用数据类型的引用
 *
 * @since 09:45
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Student s1 = new Student(18);
        Student s2 = new Student(81);
        System.out.println(s1);
        System.out.println(s2);
        /*swapStudentAge(s1, s2);
        System.out.println(s1.age);
        System.out.println(s2.age);*/
        swapStudentReference(s1, s2);
        System.out.println(s1);
        System.out.println(s2);
    }

    // 交换两个学生对象的年龄
    public static void swapStudentAge(Student s1, Student s2) {
        int temp = s1.age;
        s1.age = s2.age;
        s2.age = temp;
    }

    // 交换两个学生对象的引用
    public static void swapStudentReference(Student s1, Student s2) {
        Student temp = s1;
        s1 = s2;
        s2 = temp;
    }

}

class Student {
    int age;

    public Student() {
    }

    public Student(int age) {
        this.age = age;
    }
}
